C++ 把引用作为参数
我们已经讨论了如何使用指针来实现引用调用函数。下面的实例使用了引用来实现引用调用函数。
#include <iostream>
using namespace std;
// 函数声明
void swap(int& x, int& y);
int main ()
{
// 局部变量声明
int a = 100;
int b = 200;
cout << "交换前,a 的值:" << a << endl;
cout << "交换前,b 的值:" << b << endl;
/* 调用函数来交换值 */
swap(a, b);
cout << "交换后,a 的值:" << a << endl;
cout << "交换后,b 的值:" << b << endl;
return 0;
}
// 函数定义
void swap(int& x, int& y)
{
int temp;
temp = x; /* 保存地址 x 的值 */
x = y; /* 把 y 赋值给 x */
y = temp; /* 把 x 赋值给 y */
return;
}
当上面的代码被编译和执行时,它会产生下列结果:
交换前,a 的值: 100
交换前,b 的值: 200
交换后,a 的值: 200
交换后,b 的值: 100
C++ 函数传参:
(1)将变量名作为实参和形参。这时传给形参的是变量的值,传递是单向的。如果在执行函数期间形参的值发生变化,并不传回给实参。因为在调用函数时,形参和实参不是同一个存储单元。// 同 c
(2) 传递变量的指针。形参是指针变量,实参是一个变量的地址,调用函数时,形参(指针变量)指向实参变量单元。这种通过形参指针可以改变实参的值。// 同 c
(3) C++提供了 传递变量的引用。形参是引用变量,和实参是一个变量,调用函数时,形参(引用变量)指向实参变量单元。这种通过形参引用可以改变实参的值。
实例:
1 string f();
2 string g(string & str);
3
4 g(f());
5 g("abc");
程序编译在4,5行出错,这是为什么呢。
第5行的错误,当引用参数与实参不匹配,但可以通过转化为引用类型时,要将引用声明为const。
第4行的错误,将一个临时变量作为实参传递给参数时,也同样需要将参数类型设为const。
总结
在c++中当函数参数为引用时。
• 如果传递的实参与函数参数类型不匹配,那么只有将参数类型定义为const,那函数将会产生一个临时变量,临时变量自动转化为函数参数类型。否者将报错。 • 如果传递的实参是一个临时变量,那么就要将函数参数定义为const类型,否则也会出错
🔚